Flat Assembler Tutorial for beginners (from the tail)
  by vid (vid@InMail.sk)

<Obsah>:
  This tutorial is writen for total begginners. It's purpose is to learn you
  assembly language using Flat Assembler syntax. If you don't have Flat 
  Assembler you can download it on flatassembler.net. It can run under DOS, 
  Windows and Linux. I won't cover Linux programming here as I don't have
  any experience with it currently (but, of course, i'm going to get some :)

About me (author of this tutorial):
  By the time i'm starting writing this tutorial i'm 17 years old. I started
  coding assembly when i had some 14. Maybe it seems to be too few, but asm is
  my main language for some time (i use it rather than C), so i have some
  experience. I am not native english speaker (nor GOOD english spaker) so
  sorry me for all my mistakes.

Why using assembler?
  This question is quite goodly described in (good) book Art Of Assembly. Be
  sure to download it. I won't discuss it anymore, if you are reading this,
  then you should know why.

Why using Flat Assembler (FASM)?
  In fact, there is no "assembly syntax". You can find many assemblers
  (assembly compilators) with MUCH different syntaxes. Most common is MASM
  (macro assembler from Microsoft) and TASM (turbo assembler from Borland),
  which have almost same syntax. My opinion is that this syntax is VERY (!!!)
  stupid, but this is what people usualy call "assembly syntax". You should
  know at least basics of this syntax to understand other's code. But this
  tutorial won't cover MASM or TASM anymore. Another common syntax is NASM
  (netwide assembler). This is very good assembler, whose syntax is similar to
  FASM syntax, but it is little too complex and it's macrosyntax is worser than
  FASM's. For really big project it is maybe better than FASM, but there are
  very few big projects which are writen in any assembly language. Other common
  assembler is Linux' "as", but i don't know it, probably it is another fine
  but even more complex assembler. All assemblers i listed here were complex
  assemblers, with many useless features.  Fasm is small, fast(est), freeware
  (unlike some assebmlers i mentioned). You can write programs more quickly or
  same speed than in any other assembler. When I first saw FASM i already knew
  MASM/TASM and i was impressed by how "simplified" syntax is. And later, when
  i comprehended it's macrosyntax, i was writing assembly code twice as fast as
  before. Give it a try.

Using FASM:
  Compiler:
    At first, you have to download FASM compiler. There are 3 version to
    download.  First one is version for DOS/Win32 console (it is runned from
    command line).  Second is Win32 GUI version (it runs in nice window like
    most Windows' applications). Third is Linux version, this one will not be
    used. If you have Windows download GUI version (FASMW). Most things will
    run under it too, and if something doesn't i will notice you about it. If
    you have only DOS, download console version and some assembly IDE, i was
    using "AsmEdit". If you are using GUI version then also download file
    "fasmkeys.txt" which lists it's keys. Link is somewhere on FASM site. And
    download FAQ too, for some important infos.

  Compiling:
    Under GUI version just press CTRL-F9 on file you want to compile (or F9 to
    compile and run). Under console version write folowing text into command
    line: "fasm file.asm file.exe", where "file.asm" is source file you want to
    comoile and "file.exe" is destination file (compiled file). It can have
    another extension of course. And don't forgat to set PATH to file 'fasm.exe'
    or use some batch file to compile or whatever. Learn using fasm by practice.

About this text:
  This text is little experimental. I tried another approach than most other
  tutorials. Almost every tutorial has some (less or more, usualy more) theory
  before you get to first line of code. But for this you must memorize
  everything what you learnt in theory without using it. Another, worser, type
  of tutorials teaches you something without understanding it. My tutorial
  teaches you theory in small parts, always building on what you learnt before
  and always when possible on example code. This way there will be no
  intermediate state, you will jump from beginner to advanced.

  Another problem with learning assembly language is that you have know lot to
  be able to produce at least some output. In this tutorial it is same, of
  course, maybe even worser, but this is disadvantage of learning assembly. But
  unlike other tutorials, when you produce some output here, you understand what
  is behind (at least from your program's side).

  Goal of this tutorial is to teach you so, that theory is given first, like in
  other tutorials, but it is given so that you will also have some experiance
  with application of this theory so it is easier to remember. And it is writen
  so, that for quite long time you aren't able to write anything normal, but
  then, as you learn all what is needed, you know much more than after reading
  some other tutorial whole. Then, second part, will teach you lot about
  assembly, but this is info you can learn yourself very easily, when you know
  what's behind. It is like learning standard libraries in C, or learning
  functions from SYSTEM library in Pascal.

  Shortly, it will learn you theory step-by-step on examples, and finally it
  will give you complex idea of how-it-all-works. Then it will do what all other
  tutorials (but you will understand it better) - learn you as much as possible
  about assembly language.
